﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DOMINIO;
using DAL.ConexionBD;
using System.Data.SqlClient;
using System.Data;

namespace DAL
{
    public class ProveedorDAL
    {
        private SqlConnection cnn;

        public void Guardar(Proveedor proveedor)
        {
            cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
            SqlCommand cmd = new SqlCommand("PA_registrarProveedor", cnn);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@Id", proveedor.Id);
            cmd.Parameters.AddWithValue("@RazonSocial", proveedor.RazonSocial);
            cmd.Parameters.AddWithValue("@Ruc", proveedor.Ruc);
            cmd.Parameters.AddWithValue("@Direccion", proveedor.Direccion);
            cmd.Parameters.AddWithValue("@Telefono", proveedor.Telefono);
            cmd.Parameters.AddWithValue("@Email", proveedor.Email);

            try
            {
                cnn.Open();
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                throw new Exception("Error SQL: " + ex.Message);
            }

            cnn.Close();
        }

        public void DeleteProveedor(int codigo)
        {
            cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
            SqlCommand cmd = new SqlCommand("PA_DeleteProveedor", cnn);
            cmd.CommandType = CommandType.StoredProcedure;

            SqlParameter parametro = new SqlParameter("@codigo", SqlDbType.Int);
            parametro.Value = codigo;

            cmd.Parameters.Add(parametro);

            try
            {
                cnn.Open();
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                throw new Exception("Error SQL: " + ex.Message);
            }
            cnn.Close();
        }

        public Proveedor BuscarProveedorPorCodigo(int codigo)
        {
            cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
            SqlCommand cmd = new SqlCommand("PA_BuscarProveedor", cnn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@nombre", "#");
            cmd.Parameters.AddWithValue("@Id", codigo);

            return SelectFactory(cnn, cmd)[0];
        }

        public List<Proveedor> BuscarProveedorPorNombre(string nombre)
        {
            cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
            SqlCommand cmd = new SqlCommand("PA_BuscarProveedor ", cnn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@nombre", nombre);
            cmd.Parameters.AddWithValue("@Id", 0);

            return SelectFactory(cnn, cmd);
        }

        private static List<Proveedor> SelectFactory(SqlConnection cnx, SqlCommand cmd)
        {
            cnx.Open();

            SqlDataReader DR = cmd.ExecuteReader();
            List<Proveedor> ListaProveedor = new List<Proveedor>();

            while (DR.Read())
            {
                Proveedor proveedor = new Proveedor();

                proveedor.Id = DR.GetInt32(0);
                proveedor.RazonSocial = DR.GetString(1);
                proveedor.Ruc = DR.GetString(2);
                proveedor.Direccion = DR.GetString(3);
                proveedor.Telefono = DR.GetString(4);
                proveedor.Email = DR.GetString(5);

                ListaProveedor.Add(proveedor);
            }
            cnx.Close();
            return ListaProveedor;
        }

    }
}